package com.spring.demo04;

import com.spring.demo3.Rent;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author:liuwei
 * @creatdate:2021-07-15-14:10
 */
//使用这个类，自动生成代理类
public class PorxyInvocationHandler implements InvocationHandler {
	//被代理的接口
	private Object target;

	public void setTarget(Object target) {
		this.target = target;
	}


	//生成代理类，重点是第二个参数，获取要代理的抽象角色！之前都是一个角色，现在可以代理一类角色
	public Object getProxy(){
		return Proxy.newProxyInstance(this.getClass().getClassLoader(),
				target.getClass().getInterfaces(),this);
	}
	@Override
	// proxy : 代理类 method : 代理类的调用处理程序的方法对象.
	// 处理代理实例上的方法调用并返回结果
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		log(method.getName());
		//动态代理的本质就是使用反射机制实现
		Object invoke = method.invoke(target, args);
		return invoke;
	}

	public void log(String msg){
		System.out.println("执行了" + msg + "方法");
	}
}

